/**
 *  Copyright(C) 2012-2013 Suntec(Shanghai) Software Co., Ltd.
 *  All Right Reserved.
 */
package com.cugbmao.luence;

import java.io.IOException;
import java.util.Hashtable;

/**
 * Descriptions
 * 
 * @version 2013年5月21日
 * @author Suntec
 * @since JDK1.6
 * 
 */
public class WordIndex {
	static Hashtable<String, InfoItem> keywordIdx; // 关键词哈希表
	static String[] fileList = { // 存放原始文件内容，数组每一个代表一个文件的内容
	" 北 京 师 范 大 学", " 北 师 大 附 属 实 验 小 学", " 北 师 大 第 二 附 属 中 学" };

	public static void main( String[] args ) throws IOException {
		try {
			index();
			search( "中" );
		}
		catch ( Exception e ) {
			System.err.println( "下载失败，请检查输入地址是否正确。" );
			System.exit( 1 );
		}
	}

	private static void search( String keyword ) throws Exception {
		InfoItem item;
		System.out.println( "查找：----开始----" );
		if ( null == keywordIdx ) {
			return;
		}

		try {
			item = keywordIdx.get( keyword );

			while ( item != null ) {
				System.out.println( "查找：文件数目：" + item.getFileID() );
				System.out.println( "查找：文件偏移：" + item.getOffset() );
				System.out.println( "查找：文件内容：" + fileList[item.getOffset()] );
				item = item.getNext();
			}
		}
		catch ( Exception e ) {
			throw e;
		}

		System.out.println( "查找：----结束----" );
	}

	private static void index() throws Exception {
		InfoItem item, item2;
		System.out.println( "索引：----开始----" );

		keywordIdx = new Hashtable<String, InfoItem>();// 创建关键词Hash表

		try {

			System.out.println( "索引：Hash表初始大小：" + keywordIdx.size() );

			for ( int i = 0; i < 3; i++ ) {
				int len = fileList[i].length();
				for ( int j = 0; j < len; j++ ) {
					item = new InfoItem( i, i );
					String key = fileList[i].substring( j, j + 1 );
					System.out.print( key );
					if ( !keywordIdx.containsKey( key ) ) {
						keywordIdx.put( key, item );
					}
					else {
						item2 = keywordIdx.get( key );
						item.setNext( item2 );
						keywordIdx.put( key, item );
					}
				}
				System.out.println( "" );
			}
			System.out.println( "索引：Hash表最终大小：" + keywordIdx.size() );
		}
		catch ( Exception e ) {
			throw e;
		}
		System.out.println( "索引：----结束----" );
	}
}
